// // this.app => application,this.ctx => context,this=>helper
// // 说明：主要放置一些常用的有帮助的方法，如：
// module.exports = {
//     /********************   常用   ********************/
//     //生成http请求的响应体
//     responseBody(code, msg, data = null, tips = null) {  //code:只有1代表成功，其他自定义；msg:提示信息（中文）；data：返回的数据；err：错误信息（英文）
//         return { code, msg, data, tips }
//     },
//     //转换字符串书写模式
//     //toModeType: modeType、ModeType、mode_type
//     toWriteMode(str, toModeType = "modeType") {
//         let strArr = [], endStr = "";
//         while (str.indexOf("_") !== -1) {   //先把用_分隔开的字符串统一转为用大写字母隔开的字符串
//             let ind = str.indexOf("_");
//             str = str.replace("_", "");
//             str = str.substring(0, ind) + str.substr(ind, 1).toUpperCase() + str.substr(ind + 1);
//         }
//         // 对用大写字母隔开的字符串分隔开，并装在strArr数组中
//         let indsArr = [];
//         for (let i = 0; i < str.length; i++) {
//             let charCode = str.charCodeAt(i)
//             if (charCode >= 65 && charCode <= 90) {   //这个区间内为大写字母
//                 i != 0 && indsArr.push(i)
//             }
//         }
//         let sInd = 0, eInd = 0;
//         let length = indsArr.length + 1
//         for (let i = 0; i < length; i++) {
//             eInd = i == length - 1 ? str.length : indsArr[i];
//             strArr.push(str.substring(sInd, eInd));
//             sInd = eInd;
//         }
//         switch (toModeType) {
//             case "mode_type":
//                 strArr = strArr.map(item => {
//                     return item.toLowerCase();
//                 });
//                 endStr = strArr.join("_");
//                 break;
//             case "modeType":
//                 strArr = strArr.map((item, ind) => {
//                     item.toLowerCase();
//                     if (ind != 0) {
//                         item = item.charAt(0).toUpperCase() + item.substr(1);
//                     }
//                     return item;
//                 })
//                 endStr = strArr.join("");
//                 break;
//             case "ModeType":
//                 strArr = strArr.map(item => {
//                     return item.charAt(0).toUpperCase() + item.substr(1);
//                 })
//                 endStr = strArr.join("");
//                 break;
//             default: throw new Error(`暂不支持转换成${toModeType}类型`); break;
//         }
//         return endStr;
//     },
//     /********************  数组  ********************/
//     //获取数组————根据区间
//     //areaStr: [1,1)、[1,1]、(1,1)……  “[”或：“]”表示包含，“（”或“）”表示不包含  step: 相邻数的差值
//     getArrByArea(areaStr, step = 1) {
//         let max = 0, min = 0, leftBracket = "", rightBracket = "";
//         let areaStr = [], endArr = [];
//         if (typeof areaStr !== "string") {
//             throw new Error("参数area必须是字符串类型");
//         }
//         areaStr = areaStr.replace(/\s/g, "");
//         areaStr = areaStr.replace(/[\[\]\(\)]/g, "").split(",");
//         min = parseInt(areaStr[0]);
//         max = parseInt(areaStr[1]);
//         leftBracket = areaStr.charAt(0);
//         rightBracket = areaStr.charAt(areaStr.length - 1);
//         for (let i = min; i <= max; i += step) {
//             if (i == min) {
//                 leftBracket == "[" && endArr.push(min);
//             } else if (i == max) {
//                 rightBracket == "]" && endArr.push(max);
//             } else {
//                 endArr.push(i);
//             }
//         }
//         return endArr;
//     },






//     /********************  随机数  ********************/
//     //获取随机字符串————根据多个数组
//     //参数是n个一维数组[],[],[],...
//     getRandStrFromArrs() {
//         let str = "";
//         for (let i = 0; i < arguments.length; i++) {
//             let probability = 1 / arguments[i].length;  //概率
//             let random = Math.random();
//             let ind = Math.floor(random / probability);
//             str += arguments[i][ind];
//         }
//         return str;
//     },
//     //获取随机数————从数组
//     getRandNumFromArr(arr) {
//         let ind = Math.floor(Math.random() * arr.length);
//         return arr[ind];
//     },
//     //获取随机数————根据权重
//     //示例：weightArr=[[90,[1]],[4,[2]],[3,[3]],[2,[4]],[1,[5,6,7,8,9,10]]]   注意:90+4+3+3+1=100
//     getRandNumByWeight(weightArr) {
//         let num = 0, count = 0;
//         let random = Math.floor(Math.random() * 100);
//         for (let i = 0; i < weightArr.length; i++) {
//             count += weightArr[i][0]
//             console.log(count,random)
//             console.log(this.ctx)
//             console.log(this.getRandNumFromArr([1,2,3,4,5,6,7]))
//             // console.log(this.getRandStrFromArrs(weightArr[i][1]))
//             if (random < count) {
//                 num = parseInt(this.getRandStrFromArrs(weightArr[i][1]));
//                 break;
//             }
//         }
//         return num;
//     },
//     // //获取随机数————根据区间
//     // //areaStr: "[1,10)", "[3,5]", "(20,40)" 中括号表示包含，小括号表示不包含
//     // getRandNumByArea(areaStr) {
//     //     let leftBracket=areaStr.charAt(0);
//     //     let rightBracket = areaStr.charAt(areaStr.length - 1);


//     // },














//     /********************   时间   ********************/
//     //type: dateTime,date,time
//     formatTime(type = "dateTime") {

//     },
// };